package de.pdbm.swt.aufgabe2;

//import java.io.FileInputStream;
//import java.io.IOException;
//import java.lang.reflect.InvocationTargetException;
//import java.util.ArrayList;
import java.util.Date;
import java.util.List;
//import java.util.Properties;
/**
 * 
 * @author Hendrik Bammel & Marc von der Ohe
 * @version 1.0
 *
 */
public class MyFactory implements Factory {
	//private static final String DEFMIT = "de.pdbm.swt.aufgabe2.MitarbeiterGS";
	
	@Override
	public Mitarbeiter newMitarbeiter(String id) {
		String className = System.getProperty("mitarbeiter.class",
				"de.pdbm.swt.aufgabe2.MitarbeiterGS");
		if (id == null || id.equals("")) {
			return null;
		}
//		if (id != null && id.length() > 0) {
			try {		
				Class<?> mitClass = Class.forName(className);
				return (Mitarbeiter) 
						mitClass.getConstructor(String.class).newInstance(id);
			} catch (Exception e) {
				e.printStackTrace();
			}
//		}
		
		return null;
		
		
	}

	@Override
	public Produkt newProdukt(String id) {
		String className = System.getProperty("produkt.class",
				"de.pdbm.swt.aufgabe2.ProduktGS");
		if (id != null && id.length() > 0) {
			try {
				Class<?> prodClass = Class.forName(className);
				return (Produkt)
						prodClass.getConstructor(String.class).newInstance(id);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
			return null;
	}

	@Override
	public Bestellung newBestellung(String id, Date datum,
			Mitarbeiter mitarbeiter, List<Bestellposition> bestellpositionen) {
		String className = System.getProperty("bestellposition.class",
				"de.pdbm.swt.aufgabe2.BestellungGS");

		if (datum == null || mitarbeiter == null || bestellpositionen == null
				|| bestellpositionen.size() == 0) {
			return null;
		}
		try {
			Class<?> bestClass = Class.forName(className);
			return (Bestellung) bestClass.getConstructor(String.class,
					Date.class, Mitarbeiter.class, List.class)
					.newInstance(id, datum, mitarbeiter, bestellpositionen);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public Bestellposition newBestellposition(String id, Produkt produkt,
			int anzahl) {
		String className = System.getProperty("bestellposition.class",
				"de.pdbm.swt.aufgabe2.BestellpositionGS");
		if (produkt != null && anzahl > 0) {
			try {
				Class<?> bestClass = Class.forName(className);
				return (Bestellposition)
						bestClass.getConstructor(String.class, 
								Produkt.class, Integer.TYPE)
								.newInstance(id, produkt, anzahl);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		return null;
	}

}
